﻿Module Module1
  Private NumeroCercato As Integer = 0
  Sub Main()
    Dim arr(,) As Integer = _
        {{0, 1, 1, 2, 3, 5, 8, 13, 21, 34}, _
        {1, 2, 3, 5, 7, 11, 13, 17, 19, 23}}
    Dim arr2() As Integer = _
        {1, 2, 3, 5, 7, 11, 13, 17, 19, 23}
    Dim arr3() As Integer = _
        {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, _
         14, 16, 99}

    ' Vari metodi 
    Console.WriteLine("Numero elementi: " & _
        arr.Length)
    Console.WriteLine("Rango: " & arr.Rank)
    Console.WriteLine("Lunghezza " & _
        "dimensione 0: " & _
        arr.GetLength(0))
    Console.WriteLine("Lunghezza " & _
        "dimensione 1: " & _
        arr.GetLength(1))
    Console.WriteLine("Limiti " & _
        "dimensione 0: ({0}, {1})", _
        arr.GetLowerBound(0), arr.GetUpperBound(0))
    Console.WriteLine("Limiti " & _
        "dimensione 1: ({0}, {1})", _
        arr.GetLowerBound(1), _
        arr.GetUpperBound(1))

    ' Metodo "Exists"
    NumeroCercato = 444
    Console.WriteLine("Exists " & _
        NumeroCercato & ":" & _
        Array.Exists(arr2, _
        AddressOf NumeroUguale))
    NumeroCercato = 5
    Console.WriteLine("Exists " & _
        NumeroCercato & ": " & _
        Array.Exists(arr2, _
        AddressOf NumeroUguale))
    ' Metodo "Find"
    NumeroCercato = 7
    Console.WriteLine("Find numero " & _
        "successivo a " & _
        NumeroCercato & ": " & _
        Array.Find(arr2, _
        AddressOf TrovaSuccessivo))
    NumeroCercato = 13
    Console.WriteLine("Find numero " & _
        "successivo a " & _
        NumeroCercato & ": " & _
        Array.Find(arr2, _
        AddressOf TrovaSuccessivo))

    ' Metodo "FindLast"
    NumeroCercato = 7
    Console.WriteLine("Find numero " & _
        "precedente a " & NumeroCercato & _
        ": " & Array.FindLast(arr2, _
        AddressOf TrovaPrecedente))
    NumeroCercato = 13
    Console.WriteLine("Find numero " & _
        "precedente a " & _
        NumeroCercato & ": " & _
        Array.FindLast(arr2, _
        AddressOf TrovaPrecedente))

    ' Metodo "FindAll" per numeri dispari
    ' e numeri pari
    Console.WriteLine("Trova tutti i " & _
        "numeri dispari: ")
    Dim subArray() As Integer = _
        Array.FindAll(arr3, _
        AddressOf NumeriDispari)
    For Each numero As Integer In subArray
      Console.WriteLine(numero)
    Next

    Console.WriteLine("Trova tutti i " & _
        "numeri pari: ")
    subArray = Array.FindAll(arr3, _
        AddressOf NumeriPari)
    For Each numero As Integer In subArray
      Console.WriteLine(numero)
    Next

    ' Metodo "Copy"
    Console.WriteLine("Copia 3 numeri " & _
        "dall'elemento " & _
        "4 del primo array a partire " & _
        "dall'elemento 0 " & _
        "del secondo array: ")
    Dim arr4(4) As Integer
    Array.Copy(arr3, 4, arr4, 0, 3)
    For Each numero As Integer In arr4
      Console.WriteLine(numero)
    Next

    Console.ReadLine()
  End Sub
  Private Function NumeroUguale(ByVal n _
          As Integer) As Boolean
    If n = NumeroCercato Then
      Return True
    Else
      Return False
    End If
  End Function
  Private Function TrovaSuccessivo(ByVal n _
          As Integer) As Boolean
    If n > NumeroCercato Then
      Return True
    Else
      Return False
    End If
  End Function
  Private Function TrovaPrecedente(ByVal n _
          As Integer) As Boolean
    If n < NumeroCercato Then
      Return True
    Else
      Return False
    End If
  End Function
  Private Function NumeriDispari(ByVal n _
          As Integer) As Boolean
    If (n Mod 2) <> 0 Then
      Return True
    Else
      Return False
    End If
  End Function
  Private Function NumeriPari(ByVal n _
          As Integer) As Boolean
    If (n Mod 2) = 0 Then
      Return True
    Else
      Return False
    End If
  End Function
End Module
